using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data;
using MODELO;
using MODELO.dtsConsultaUsuariosTableAdapters;
using MODELO.dtsUsuariosTableAdapters;

namespace CONTROLADORA
{
    public class Usuarios
    {

        public dtsConsultaUsuarios GetUsuarios(String nroDocumento, String nombreUsuario)
        {
            dtsConsultaUsuarios ds = new dtsConsultaUsuarios();
            new ConsultaUsuariosTableAdapter().Fill(ds.ConsultaUsuarios, nroDocumento, nombreUsuario);
            return ds;
        }

        public dtsUsuarios.UsuarioRow GetUsuario(String nombreUsuario, String contrasenia)
        {
            contrasenia = Encriptacion.EncriptarPassword(contrasenia);
            dtsUsuarios.UsuarioDataTable dt = new UsuarioTableAdapter().GetDataByNombreUsuarioContrasenia(nombreUsuario, contrasenia);
            return dt != null && dt.Rows.Count != 0 ? dt[0] : null;
        }

        public dtsUsuarios GetUsuarioPorID(int idUsuario)
        {
            dtsUsuarios usuario = new dtsUsuarios();

            new UsuarioTableAdapter().FillByID(usuario.Usuario, idUsuario);

            new Usuario_GrupoTableAdapter().FillByIDUsuario(usuario.Usuario_Grupo, idUsuario);

            return usuario;
        }

        public void GuardarEntidad(dtsUsuarios usuario)
        {
            if (usuario.Usuario.Count != 0)
            {
                var usuarioRow = usuario.Usuario[0];
                if (usuarioRow.RowState != DataRowState.Deleted &&
                    (usuarioRow.RowState == DataRowState.Added || usuarioRow.Contrasenia.CompareTo(usuarioRow[usuario.Usuario.ContraseniaColumn, DataRowVersion.Original]) != 0))
                {
                    usuarioRow.Contrasenia = Encriptacion.EncriptarPassword(usuarioRow.Contrasenia);
                }
            }

            MODELO.dtsUsuariosTableAdapters.TableAdapterManager tam= new MODELO.dtsUsuariosTableAdapters.TableAdapterManager();
            tam.UsuarioTableAdapter = new UsuarioTableAdapter();
            tam.UsuarioTableAdapter.Update(usuario.Usuario);
            
            Usuario_GrupoTableAdapter taUG = new Usuario_GrupoTableAdapter();
            foreach (dtsUsuarios.Usuario_GrupoRow filaUsrGrupo in usuario.Usuario_Grupo.Rows)
            {
                switch (filaUsrGrupo.RowState)
                {
                    case DataRowState.Added:
                        taUG.InsertQuery(filaUsrGrupo.UsuarioRow.ID_Usuario, filaUsrGrupo.ID_Grupo);
                        break;
                    case DataRowState.Deleted:
                        taUG.DeleteQuery((int)filaUsrGrupo[usuario.Usuario_Grupo.ID_UsuarioColumn, DataRowVersion.Original], (int)filaUsrGrupo[usuario.Usuario_Grupo.ID_GrupoColumn, DataRowVersion.Original]);
                        break;
                    case DataRowState.Detached:
                    case DataRowState.Modified:
                    case DataRowState.Unchanged:
                    default:
                        break;
                }
            }
        }

    }
}
